def index():
	if session.pid is not None:
		redirect(URL('show'))
	response.name_bar = 'Projetos'
	projetos = db(db.projeto).select()
	return dict(projetos=projetos)

@auth.requires_login()
def new():
	response.name_bar = 'Nova função para %s' % (
			db(db.projeto.id==session.pid).select().first().nome)
	form = SQLFORM(db.decomposicao_funcao, submit_button='Adicionar',
			ignore_rw=True)
	if form.process().accepted:
		response.flash = 'Função criada com sucesso'
		ef_id = db.esforco_funcao.insert(
				nome=db(db.decomposicao_funcao.id==form.vars.id).select().first().nome,
				er=0, projeto=0, implementacao=0, teste=0)
		projeto = db(db.projeto.id==session.pid).select().first()
		projeto.decomposicao_funcao.append(form.vars.id)
		projeto.esforco_funcao.append(ef_id)
		projeto.update_record()
		redirect(URL('show'))
	return dict(form=form)

@auth.requires_login()
def show():
	fmt = '%.2f'
	if request.vars.pid is not None:
		session.pid = request.vars.pid
	if session.pid is None:
		redirect(URL('index'))
	projeto = db(db.projeto.id==session.pid).select().first()
	response.name_bar = projeto.nome
	funcoes_thead = ['Nome', 'Pessimo', 'Bom', 'Ótimo', 'Esperado',
			'Preço por linha', 'Linhas por mês', 'Custo', 'Pessoas-mês']
	funcoes_tbody = []
	esperado_sum = 0
	custo_sum = 0
	pessoas_sum = 0
	for i in projeto.decomposicao_funcao:
		f = db.decomposicao_funcao[i]
		if f.precoporlinha != 0:
			esperado = (f.pessimo + 4 * f.bom + f.otimo) / 6
			esperado_sum += esperado
			custo = esperado * f.precoporlinha
			custo_sum += custo
			pessoas = esperado / f.linhapormes
			pessoas_sum += pessoas
		else:
			esperado = 0
			custo = 0
			pessoas = 0
		funcoes_tbody.append((f.nome, fmt % f.pessimo, fmt % f.bom, fmt % f.otimo,
			'%.2f' % esperado, fmt % f.precoporlinha, fmt % f.linhapormes,
			'%.2f' % custo, '%.2f' % pessoas, f.id))
	return dict(projeto=projeto,
			funcoes_thead=funcoes_thead,
			funcoes_tbody=funcoes_tbody,
			esperado_sum='%.2f' % esperado_sum,
			custo_sum='%.2f' % custo_sum,
			pessoas_sum='%.2f' % pessoas_sum)

@auth.requires_login()
def delete_funcao():
	df_id = int(request.args[0])
	projeto = db(db.projeto.id==session.pid).select().first()
	projeto.decomposicao_funcao.remove(df_id)
	projeto.update_record()
	db(db.decomposicao_funcao.id==df_id).delete()
	redirect(URL('show'))
	return dict()

@auth.requires_login()
def update_funcao():
	fid = int(request.args[0])
	response.name_bar = 'Editando função %s de %s' % (db.decomposicao_funcao[fid].nome,
			db.projeto[session.pid].nome)
	form = crud.update(db.decomposicao_funcao, fid, next=URL('show'), deletable=False)
	return dict(form=form)
